package com.seo.service.transaction.sdk;

import java.math.BigDecimal;

import com.seo.pojo.ReturnBody;
import com.seo.pojo.transaction.TransactionFlow;

public interface TransactionService {

    /**
     * 注册账单代理
     * @param key 账单科目编码
     * @param service 对象
     */
    void put(String key, TransactionItemService service);

    /**
     * 保存账单
     * @param tradeId 全局ID
     * @param tf 账单
     * @return 结果
     */
    public ReturnBody saveTransactionFlow(String tradeId, TransactionFlow tf);

    /**
     * 保存账单子科目
     * @param tradeId 全局ID
     * @param tf 账单
     * @param payMode 支付方式
     * @param amount 金额
     * @param itemCode 账单科目
     * @return 结果
     */
    public ReturnBody saveTransactionFlowItem(String tradeId, TransactionFlow tf, String payMode,
                                              BigDecimal amount, String itemCode, String state);

    /**
     * 获取支付信息
     * 
     * @param transactionCode
     *            transactionCode
     * @return 获取交易流水记录
     */
    TransactionFlow getTransactionFlow(String transactionCode);
    
    /**
     * 通过账单ID获取账单
     * @param id 账单ID
     * @return 账单
     */
    TransactionFlow getTransactionFlowById(long id);

    /**
     * 更新账单-支付完成
     * @param tradeId 全局ID
     * @param transactionCode 账单编号
     * @param payMode 支付方式
     * @param state 账单状态
     * @return 更新结果
     */
    ReturnBody updateTransactionFlow(String tradeId, String transactionCode, String payMode, String state);

}
